home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #2 / Ham Radio 2000 - Volume 2.iso / HAMV2 / TCP_IP / TNOS230S / NODE.C < prev    next >
C/C++ Source or Header  |  1997-09-06  |  10KB  |  481 lines

  1. #include "global.h"
  2. #ifdef NODECALL
  3. #include "commands.h"
  4. #include "mailbox.h"
  5. #include "netrom.h"
  6. #include "files.h"
  7.  
  8.  
  9. static int donodebanner (int argc, char *argv[], void *p);
  10. static int donodenetrom (int argc, char *argv[], void *p);
  11. static int donodenralias (int argc, char *argv[], void *p);
  12. static int donodecall (int argc, char *argv[], void *p);
  13. static int donodebbscall (int argc, char *argv[], void *p);
  14. static int donodebbsifc (int argc, char *argv[], void *p);
  15. static char *return_id (void);
  16. static int donodeports (int argc, char *argv[], void *p);
  17. static int donodeheard (int argc, char *argv[], void *p);
  18. static int dolistnodes (int argc, char *argv[], void *p);
  19. static int dolistusers (int argc, char *argv[], void *p);
  20. static int donodechat (int argc, char *argv[], void *p);
  21. static int donodealias (int argc, char *argv[], void *p);
  22. static int dolistroutes (int argc, char *argv[], void *p);
  23. static int donodeinfo (int argc, char *argv[], void *p);
  24. static int donodebye (int argc, char *argv[], void *p);
  25. static int donodeconnect (int argc, char *argv[], void *p);
  26. static int donodehelp (int argc, char *argv[], void *p);
  27. static int donodebbs (int argc, char *argv[], void *p);
  28. static int donodetelnet (int argc, char *argv[], void *p);
  29. #ifdef CONVERS
  30. static int donodeconf (int argc, char *argv[], void *p);
  31. #endif
  32. static int donodeshowid (int argc, char *argv[], void *p);
  33. static int donodegwexit (int argc, char *argv[], void *p);
  34.  
  35. extern int dombconvers (int argc, char *argv[], void *p);
  36. extern int dombjheard (int argc, char *argv[], void *p);
  37. extern int dombusers (int argc, char *argv[], void *p);
  38. extern int dochat (int argc, char *argv[], void *p);
  39. #ifdef NETROM
  40. extern int donrneighbour (int argc, char *argv[], void *p);
  41. #endif
  42. extern int dombconnect (int argc, char *argv[], void *p);
  43.  
  44. extern char Nodecall[AXALEN];    /* the node call in 'call' form */
  45. extern char Nodealias[AXALEN];    /* the node alias call in 'call' form */
  46. extern short SecureTelnet;
  47.  
  48. static char *BBScall = NULLCHAR, *BBSinterface = NULLCHAR;
  49. static char *NODEbanner = NULLCHAR;
  50. int NodeNetrom = 0, NodeAlias = 0;
  51. static int NodeExitMode = 0;
  52.  
  53.  
  54. static struct cmds NodeTab[] =
  55. {
  56.     { "alias",        donodealias,    0, 0, NULLCHAR },
  57.     { "banner",        donodebanner,    0, 0, NULLCHAR },
  58.     { "bbscall",        donodebbscall,    0, 0, NULLCHAR },
  59.     { "bbsinterface",    donodebbsifc,    0, 0, NULLCHAR },
  60.     { "call",        donodecall,    0, 0, NULLCHAR },
  61.     { "gatewayexit",    donodegwexit,    0, 0, NULLCHAR },
  62. #ifdef NETROM
  63.     { "netrom2node",    donodenetrom,    0, 0, NULLCHAR },
  64.     { "nralias2node",    donodenralias,    0, 0, NULLCHAR },
  65. #endif
  66.     { "showid",        donodeshowid,    0, 0, NULLCHAR },
  67.     { NULLCHAR,        NULL,        0, 0, NULLCHAR }
  68. };
  69.  
  70.  
  71.  
  72. int
  73. donode (int argc, char *argv[], void *p)
  74. {
  75.     return subcmd (NodeTab, argc, argv, p);
  76. }
  77.  
  78.  
  79.  
  80.  
  81.  
  82. static int
  83. donodegwexit (int argc, char *argv[], void *p OPTIONAL)
  84. {
  85.     return setbool (&NodeExitMode, "Exit node upon return from gateway functions", argc, argv);
  86. }
  87.  
  88.  
  89.  
  90.  
  91. static int
  92. donodenetrom (int argc, char *argv[], void *p OPTIONAL)
  93. {
  94.     return setbool (&NodeNetrom, "Intercept netrom call and send to node instead", argc, argv);
  95. }
  96.  
  97.  
  98.  
  99.  
  100. static int
  101. donodenralias (int argc, char *argv[], void *p OPTIONAL)
  102. {
  103.     return setbool (&NodeAlias, "Intercept netrom alias and send to node instead", argc, argv);
  104. }
  105.  
  106.  
  107.  
  108.  
  109. /* Display or change node AX.25 address */
  110. static int
  111. donodecall (int argc, char *argv[], void *p OPTIONAL)
  112. {
  113. char tmp[AXBUF];
  114.  
  115.     if (argc < 2) {
  116.         tprintf ("%s\n", pax25 (tmp, Nodecall));
  117.         return 0;
  118.     }
  119.     if (setcall (Nodecall, argv[1]) == -1)
  120.         return -1;
  121.     return 0;
  122. }
  123.  
  124.  
  125.  
  126.  
  127. /* Display or change node AX.25 alias address */
  128. static int
  129. donodealias (int argc, char *argv[], void *p OPTIONAL)
  130. {
  131. char tmp[AXBUF];
  132.  
  133.     if (argc < 2) {
  134.         tprintf ("%s\n", pax25 (tmp, Nodealias));
  135.         return 0;
  136.     }
  137.     if (setcall (Nodealias, argv[1]) == -1)
  138.         return -1;
  139.     return 0;
  140. }
  141.  
  142.  
  143.  
  144.  
  145. /* Display or change node BBS callsign */
  146. static int
  147. donodebbscall (int argc, char *argv[], void *p OPTIONAL)
  148. {
  149.     if (argc < 2)    {
  150.         if (BBScall != NULLCHAR)
  151.             tprintf ("%s\n", BBScall);
  152.         return 0;
  153.     }
  154.     free (BBScall);
  155.     BBScall = NULLCHAR;
  156.     if (argv[1][0])
  157.         BBScall = strdup (argv[1]);
  158.     return 0;
  159. }
  160.  
  161.  
  162.  
  163.  
  164. /* Display or change node banner string */
  165. static int
  166. donodebanner (int argc, char *argv[], void *p OPTIONAL)
  167. {
  168.     if (argc < 2)    {
  169.         if (NODEbanner != NULLCHAR)
  170.             tprintf ("%s\n", NODEbanner);
  171.         return 0;
  172.     }
  173.     free (NODEbanner);
  174.     NODEbanner = NULLCHAR;
  175.     if (argv[1][0])
  176.         NODEbanner = strdup (argv[1]);
  177.     return 0;
  178. }
  179.  
  180.  
  181.  
  182.  
  183. /* Display or change node BBS interface */
  184. static int
  185. donodebbsifc (int argc, char *argv[], void *p OPTIONAL)
  186. {
  187.     if (argc < 2)    {
  188.         if (BBSinterface != NULLCHAR)
  189.             tprintf ("%s\n", BBSinterface);
  190.         return 0;
  191.     }
  192.     free (BBSinterface);
  193.     BBSinterface = NULLCHAR;
  194.     if (argv[1][0])
  195.         BBSinterface = strdup (argv[1]);
  196.     return 0;
  197. }
  198.  
  199.  
  200.  
  201. /* Display the current node ID string */
  202. static int
  203. donodeshowid (int argc OPTIONAL, char *argv[] OPTIONAL, void *p OPTIONAL)
  204. {
  205.     tprintf ("%s\n", return_id());
  206.     return 0;
  207. }
  208.  
  209.  
  210.  
  211.  
  212. static char *
  213. return_id (void)
  214. {
  215. static char buffer[40];
  216. char tmp[AXBUF];
  217. char tmp2[AXBUF];
  218.  
  219.     if (!Nodealias[0] && !Nodecall[0])
  220.         strcpy (buffer, "NODE} ");
  221.     else if (Nodealias[0] && Nodecall[0])
  222.         sprintf (buffer, "%s:%s} ", pax25 (tmp, Nodealias), pax25 (tmp2, Nodecall));
  223.     else if (Nodealias[0])
  224.         sprintf (buffer, "%s} ", pax25 (tmp, Nodealias));
  225.     else
  226.         sprintf (buffer, "%s} ", pax25 (tmp, Nodecall));
  227.     return buffer;
  228. }
  229.  
  230.  
  231.  
  232. static struct cmds Ndcmds[] =
  233. {
  234.     { "?",        donodehelp,        0, 0, NULLCHAR },
  235.     { "Bye",    donodebye,        0, 0, NULLCHAR },
  236. #ifdef GATECMDS
  237.     { "Connect",    donodeconnect,        0, 0, NULLCHAR },
  238. #endif
  239. #ifdef CONVERS
  240.     { "CONFerence",    donodeconf,        0, 0, NULLCHAR },
  241. #endif
  242.     { "Help",    donodehelp,        0, 0, NULLCHAR },
  243.     { "Info",    donodeinfo,        0, 0, NULLCHAR },
  244. #ifdef    AX25
  245.     { "Jheard",    donodeheard,        0, 0, NULLCHAR },
  246. #endif
  247. #if defined(NETROM) && defined(GATECMDS)
  248.     { "Nodes",    dolistnodes,        0, 0, NULLCHAR },
  249. #endif
  250. #if defined(NETROM) && defined(GATECMDS)
  251.     { "NRoutes",    dolistroutes,        0, 0, NULLCHAR },
  252. #endif
  253.     { "Pbbs",    donodebbs,        0, 0, NULLCHAR },
  254.     { "POrts",    donodeports,        0, 0, NULLCHAR },
  255. #ifdef FOQ_CMDS
  256.     { "Talk",    donodechat,        0, 0, NULLCHAR },
  257. #endif
  258. #ifdef GATECMDS
  259.     { "Telnet",    donodetelnet,        0, 0, NULLCHAR },
  260. #endif
  261.     { "Quit",    donodebye,        0, 0, NULLCHAR },
  262.     { "Users",    dolistusers,        0, 0, NULLCHAR },
  263.     { NULLCHAR,    NULLFP ((int, char **, void *)),
  264.                         0, 0, "Huh?" },
  265. };
  266.  
  267.  
  268.  
  269.  
  270. static int
  271. donodeports (int argc, char *argv[], void *p)
  272. {
  273.     tputs ("Ports:\n");
  274.     return dombports (argc, argv, p);
  275. }
  276.  
  277.  
  278.  
  279.  
  280. static int
  281. donodeheard (int argc, char *argv[], void *p)
  282. {
  283.     tputs ("Jheard:\n");
  284.     return dombjheard (argc, argv, p);
  285. }
  286.  
  287.  
  288.  
  289.  
  290. static int
  291. donodebbs (int argc OPTIONAL, char *argv[] OPTIONAL, void *p)
  292. {
  293. char buf[8], *newargv[4], buf2[2];
  294. struct mbx *m;
  295. int retval = 0;
  296. int ind = 1;
  297. char tmp[AXBUF], tmp2[6];
  298.  
  299.     m = (struct mbx *) p;
  300.     m->state = MBX_GATEWAY;
  301.  
  302.     if (BBScall)    {
  303.         strcpy (buf2, "C");
  304.         newargv[0] = buf2;
  305.         if (BBSinterface)    {
  306.             newargv[1] = BBSinterface;
  307.             ind++;
  308.         }
  309.         newargv[ind] = BBScall;
  310.         newargv[ind + 1] = NULLCHAR;
  311.         retval = donodeconnect (ind + 1, newargv, p);
  312.     } else    {
  313.         SecureTelnet = 0;
  314.         m->stype = '+';
  315.         m->authenticated |= 0x10;
  316.         if (if_lookup ("axlp") != NULLIF) {
  317.             strcpy (buf2, "C");
  318.             newargv[0] = buf2;
  319.             (void) pax25 (tmp, Mycall);
  320.             sprintf (tmp2, "axlp");
  321.             newargv[1] = tmp2;
  322.             newargv[2] = tmp;
  323.             retval = donodeconnect (3, newargv, p);
  324.         } else {
  325.             strcpy (buf2, "T");
  326.             newargv[0] = buf2;
  327.             newargv[1] = Hostname;
  328.             sprintf (buf, "%d", IPPORT_TELNET);
  329.             newargv[2] = buf;
  330.             retval = dombtelnet (3, newargv, p);
  331.             tprintf ("\n%sWelcome back.\n", return_id());
  332.         }
  333.         m->authenticated &= ~0x10;
  334.     }
  335.     return ((NodeExitMode) ? -2 : retval);
  336. }
  337.  
  338.  
  339.  
  340.  
  341. static int
  342. dolistnodes (int argc OPTIONAL, char *argv[] OPTIONAL, void *p OPTIONAL)
  343. {
  344.     tputs ("Nodes:\n");
  345.     return doroutedump ();
  346. }
  347.  
  348.  
  349.  
  350.  
  351. static int
  352. dolistusers (int argc, char *argv[], void *p)
  353. {
  354.     tputs ("Users:\n");
  355.     return dombusers (argc, argv, p);
  356. }
  357.  
  358.  
  359.  
  360.  
  361. static int
  362. donodechat (int argc, char *argv[], void *p)
  363. {
  364.     tputs ("Talk:\n");
  365.     return dochat (argc, argv, p);
  366. }
  367.  
  368.  
  369.  
  370.  
  371. static int
  372. dolistroutes (int argc, char *argv[], void *p)
  373. {
  374.     tputs ("Routes:\n");
  375.     return donrneighbour (argc, argv, p);
  376. }
  377.  
  378.  
  379.  
  380.  
  381. static int
  382. donodeinfo (int argc OPTIONAL, char *argv[] OPTIONAL, void *p OPTIONAL)
  383. {
  384.     tputs ("Info:\n");
  385.     (void) DisplayFile (NODEInfo, Curproc->output);
  386.     return 0;
  387. }
  388.  
  389.  
  390.  
  391. static int
  392. donodebye (int argc OPTIONAL, char *argv[] OPTIONAL, void *p OPTIONAL)
  393. {
  394.     tputs ("Goodbye\n");
  395.     kpause (500L);
  396.     return -2;
  397. }
  398.  
  399.  
  400.  
  401. static int
  402. donodetelnet (int argc, char *argv[], void *p)
  403. {
  404. int retval;
  405. struct mbx *m = (struct mbx *) p;
  406.  
  407.     m->authenticated |= 0x10;
  408.     retval = dombtelnet (argc, argv, p);
  409.     m->authenticated &= ~0x10;
  410.     tprintf ("\n%sWelcome back.\n", return_id());
  411.     return ((NodeExitMode) ? -2 : retval);
  412. }
  413.  
  414.  
  415.  
  416. #ifdef CONVERS
  417. static int
  418. donodeconf (int argc, char *argv[], void *p)
  419. {
  420. int retval;
  421.  
  422.     retval = dombconvers (argc, argv, p);
  423.     tprintf ("\n%sWelcome back.\n", return_id());
  424.     return retval;
  425. }
  426. #endif
  427.  
  428.  
  429.  
  430. static int
  431. donodeconnect (int argc, char *argv[], void *p)
  432. {
  433. int retval;
  434. struct mbx *m = (struct mbx *) p;
  435.  
  436.     m->authenticated |= 0x10;
  437.     retval = dombconnect (argc, argv, p);
  438.     m->authenticated &= ~0x10;
  439.     tprintf ("\n%sWelcome back.\n", return_id());
  440.     return ((NodeExitMode) ? -2 : retval);
  441. }
  442.  
  443.  
  444.  
  445. static int
  446. donodehelp (int argc, char *argv[], void *p OPTIONAL)
  447. {
  448. char buf[255];
  449.  
  450.     sprintf (buf, "Node Commands for %s at %s\n\n", Version, Hostname);
  451.     dohelper (buf, &Ndcmds[1], "[", (argv[0][0] == '?' && argc == 1) ? NULLCHAR : NODEHelp, (argc == 2) ? argv[1] : NULLCHAR);
  452.     return 0;
  453. }
  454.  
  455.  
  456.  
  457. int
  458. node_incom (int argc OPTIONAL, char *argv[] OPTIONAL, void *p)
  459. {
  460. struct mbx *m = (struct mbx *) p;
  461.  
  462.     if (NODEbanner != NULLCHAR)
  463.         tprintf ("%s%s\n", return_id(), NODEbanner);
  464.  
  465.     while (mbxrecvline (m) != -1) {
  466.         tputs (return_id ());
  467.         if (m->privs & EXCLUDED_CMD)
  468.             break;
  469.  
  470.         if (cmdparse (Ndcmds, m->line, (void *) m) == -2)
  471.             break;
  472.  
  473.         tputc ('\n');
  474.         m->state = MBX_NODE;
  475.     }
  476.     return 0;
  477. }
  478.  
  479.  
  480. #endif    /* NODECALL */
  481.